package com.polaris.live.utils
/**
 * 位运算比较
 *
 * @author Created by 半仙 on 2023/8/31/031 18:54
 */
object BitwiseUtils {
    /**
     * 与运算解析
     *
     * @param type 状态
     * @param t    比较状态
     * @return bool
     */
    fun isBitwise(type: Int, t: Int): Boolean {
        return type and t == t
    }

    /**
     * 与运算解析
     *
     * @param type 状态
     * @param t    比较状态
     * @return bool
     */
    fun isBitwise(type: Long, t: Long): Boolean {
        return type and t == t
    }

    /**
     * 或运算添加
     *
     * @param type 状态
     * @param t    添加状态
     * @return bool
     */
    fun addBitwise(type: Int, t: Int): Int {
        return type or t
    }

    /**
     * 或运算添加
     *
     * @param type 状态
     * @param t    添加状态
     * @return bool
     */
    fun addBitwise(type: Long, t: Long): Long {
        return type or t
    }

    /**
     * 异或运算删除
     *
     * @param type 状态
     * @param t    删除状态
     * @return bool
     */
    fun removeBitwise(type: Int, t: Int): Int {
        return type and  t.inv()
    }

    /**
     * 异或运算删除
     *
     * @param type 状态
     * @param t    删除状态
     * @return bool
     */
    fun removeBitwise(type: Long, t: Long): Long {
        return type and t.inv()
    }

    /**
     * 按type聚合最终的值
     */
    fun bitwiseOperation(types: LongArray): Long {
        var tmpType: Long? = null

        types.forEach {
            tmpType = tmpType.run {
                if (this != null) {
                    addBitwise(this, it)
                } else {
                    addBitwise(1, it)
                }
            }
        }

        return tmpType ?: 0
    }
}